const { Service } = require('egg');
const crypto = require('crypto');

// 创建符合Egg.js要求的sessionStore
class SessionStore extends Map {
  constructor() {
    super();
  }

  destroy() {
    // 销毁方法，清空所有会话
    this.clear();
  }
}

class UserService extends Service {
  /**
   * 验证用户登录
   * @param {string} username - 用户名
   * @param {string} password - 密码
   */
  async login(username, password) {
    // 在实际应用中，这里应该查询数据库
    // 但在这个简化版本中，我们使用硬编码的凭据
    const validUsername = 'fourcat';
    const validPassword = 'fourcat444';
    
    if (username === validUsername && password === validPassword) {
      // 生成token (在实际应用中应该使用更安全的方法)
      const token = this._generateToken(username);
      
      // 将token存储在内存中 (在实际应用中应该使用Redis等)
      this.app.sessionStore = this.app.sessionStore || new SessionStore();
      this.app.sessionStore.set(token, {
        username,
        loginTime: new Date().toISOString(),
      });
      
      return {
        success: true,
        token,
        username,
      };
    }
    
    return {
      success: false,
      message: '用户名或密码不正确',
    };
  }
  
  /**
   * 验证token是否有效
   * @param {string} token - 用户认证token
   */
  verifyToken(token) {
    if (!token) return false;
    
    const sessionStore = this.app.sessionStore || new SessionStore();
    return sessionStore.has(token);
  }
  
  /**
   * 生成简单的token
   * @private
   */
  _generateToken(username) {
    const timestamp = Date.now().toString();
    const randomStr = Math.random().toString(36).substring(2);
    const data = `${username}-${timestamp}-${randomStr}`;
    
    return crypto
      .createHash('sha256')
      .update(data)
      .digest('hex');
  }
}

module.exports = UserService; 